
#ifndef UTILS_SMART_PTR_H
#define UTILS_SMART_PTR_H

#if defined(UTILS_ALL_BOOST_TR1)
#if !defined(UTILS_SMART_PTR_BOOST_TR1) \
    && !defined(UTILS_SMART_PTR_BOOST) \
    && !defined(UTILS_SMART_PTR_STANDARD) 
#define UTILS_SMART_PTR_BOOST_TR1
#endif
#elif defined(UTILS_ALL_BOOST)
#if !defined(UTILS_SMART_PTR_BOOST_TR1) \
    && !defined(UTILS_SMART_PTR_BOOST) \
    && !defined(UTILS_SMART_PTR_STANDARD) 
#define UTILS_SMART_PTR_BOOST
#endif
#elif defined(UTILS_ALL_STANDARD)
#if !defined(UTILS_SMART_PTR_BOOST_TR1) \
    && !defined(UTILS_SMART_PTR_BOOST) \
    && !defined(UTILS_SMART_PTR_STANDARD) 
#define UTILS_SMART_PTR_STANDARD
#endif
#else
#if !defined(UTILS_SMART_PTR_BOOST_TR1) \
    && !defined(UTILS_SMART_PTR_BOOST) \
    && !defined(UTILS_SMART_PTR_STANDARD) 
#define UTILS_SMART_PTR_STANDARD_TR1
#endif
#endif

#if defined(UTILS_SMART_PTR_BOOST_TR1)
#include <boost/tr1/memory.hpp>
namespace utils {
   using std::tr1::bad_weak_ptr;
   using std::tr1::shared_ptr;
   using std::tr1::static_pointer_cast;
   using std::tr1::dynamic_pointer_cast;
   using std::tr1::const_pointer_cast;
   using std::tr1::get_deleter;
   using std::tr1::weak_ptr;
   using std::tr1::enable_shared_from_this;
}
#elif defined(UTILS_SMART_PTR_BOOST)
#include <boost/smart_ptr.hpp>
namespace utils {
   using ::boost::bad_weak_ptr;
   using ::boost::shared_ptr;
   using ::boost::static_pointer_cast;
   using ::boost::dynamic_pointer_cast;
   using ::boost::const_pointer_cast;
   using ::boost::get_deleter;
   using ::boost::weak_ptr;
   using ::boost::enable_shared_from_this;
}
#elif defined(UTILS_SMART_PTR_STANDARD)
#include <memory>
namespace utils {
   using std::bad_weak_ptr;
   using std::shared_ptr;
   using std::static_pointer_cast;
   using std::dynamic_pointer_cast;
   using std::const_pointer_cast;
   using std::get_deleter;
   using std::weak_ptr;
   using std::enable_shared_from_this;
}
#elif defined(UTILS_SMART_PTR_STANDARD_TR1)
#include <tr1/memory>
namespace utils {
   using std::tr1::bad_weak_ptr;
   using std::tr1::shared_ptr;
   using std::tr1::static_pointer_cast;
   using std::tr1::dynamic_pointer_cast;
   using std::tr1::const_pointer_cast;
   using std::tr1::get_deleter;
   using std::tr1::weak_ptr;
   using std::tr1::enable_shared_from_this;
}
#endif

#endif // UTILS_SMART_PTR_H

